#!/bin/bash
# pgBackRest 增量备份脚本

# 脚本目录路径
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
COMMON_DIR="${SCRIPT_DIR}/../common"

# 加载公共工具函数
source "${COMMON_DIR}/utils.sh"

# 初始化环境
LOG_FILE_PREFIX="pgbackrest_incr"
init
start_timer

log_info "开始执行 pgBackRest 增量备份..."

# 检查 PostgreSQL 连接
if ! check_postgres_connection; then
    log_error "PostgreSQL 连接检查失败，无法继续备份"
    exit 1
fi

# 检查是否存在全量备份
log_info "检查是否存在全量备份..."
if ! pgbackrest --stanza="${PGBACKREST_STANZA}" info | grep -q "full backup"; then
    log_warning "不存在全量备份，无法执行增量备份"

    # 询问是否执行全量备份
    log_info "正在执行全量备份作为增量备份的基础..."

    if pgbackrest --stanza="${PGBACKREST_STANZA}" backup --type=full; then
        log_success "全量备份执行成功，可以继续执行增量备份"
    else
        log_error "全量备份执行失败，无法继续进行增量备份"
        exit 1
    fi
fi

# 执行增量备份
log_info "执行增量备份..."
if pgbackrest --stanza="${PGBACKREST_STANZA}" backup --type=incr; then
    log_success "增量备份执行成功"

    # 显示备份信息
    log_info "备份信息:"
    pgbackrest --stanza="${PGBACKREST_STANZA}" info | tee -a "${LOG_FILE}"

    # 发送成功通知
    if [ "${ENABLE_EMAIL_NOTIFICATION}" = "true" ]; then
        SUBJECT="[SUCCESS] PostgreSQL 增量备份完成 - $(date '+%Y-%m-%d')"
        BODY="PostgreSQL 增量备份已成功完成。\n\n备份信息:\n$(pgbackrest --stanza=${PGBACKREST_STANZA} info)"
        send_email_notification "${SUBJECT}" "${BODY}"
    fi
else
    log_error "增量备份执行失败"

    # 发送失败通知
    if [ "${ENABLE_EMAIL_NOTIFICATION}" = "true" ]; then
        SUBJECT="[ERROR] PostgreSQL 增量备份失败 - $(date '+%Y-%m-%d')"
        BODY="PostgreSQL 增量备份失败，请检查日志。\n\n日志文件: ${LOG_FILE}"
        send_email_notification "${SUBJECT}" "${BODY}"
    fi

    exit 1
fi

# 清理过期的备份（根据配置文件中的保留策略）
log_info "清理过期备份..."
pgbackrest --stanza="${PGBACKREST_STANZA}" expire

# 显示执行时间
end_timer

log_info "增量备份脚本执行完成"
exit 0
